草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 非类型模板参数中的占位符类型是否可以涉及作为模板参数传递的函数的重载解析?

thisquestion的后续行动.假设占位符可用于推断构成非类型模板参数的函数指针的结果类型。c++17是否允许对传递给模板函数的名称执行重载解析——在不知道结果类型的情况下执行隐式转换需要这样做?templatestructFoo{};intbar(int);floatbar(float);intmain(){static_cast(Foo{});}[gcc]以及[clang]似乎接受代码。 最佳答案 是的,根据verybulletRakete1111pointedout是允许的.而且没有必要只是假设它可以完成,它是根据占位符类

c++ - 在 namespace 内的 lambda 中使用时找不到运算符重载

以下不编译(使用Clang5.0.0/gcc7.3,std:C++11):Clang中的错误信息:错误:二进制表达式的无效操作数(std::vector>和std::vector>)#include#includenamespacens{usingMyType=std::vector;}//namespacensusingns::MyType;MyType&operator+=(MyType&lhs,constMyType&rhs){for(inti=0;i;Funcoperator+(constFunc&lhs,constFunc&rhs){return[lhs,rhs](){aut

c++ - 使用模板的函数重载

下面是一个函数的两个重载声明:voidfun(char&arg);voidfun(int&arg);voidfun(long&arg);定义做同样的工作:voidfun(char&arg){++arg;}voidfun(int&arg){++arg;}voidfun(long&arg){++arg;}如何使用模板只接受int、char和long类型的参数来声明和定义一次函数?如果函数被误用(例如,传递了double类型的变量),应该尽快(在运行前)出现错误。 最佳答案 你可以在函数体中使用static_assert和一堆std::i

c++ - 是否可以将字符串重载为 char 元素的 vector ?

我有一个作用于元素列表的类,如下所示:templateclassMyClass{...};我需要实现某些方法,这些方法都适用于vector和一个string-这是大多数用户将对象初始化为MyClass()时使用的内容.因此,我被迫遵循这种重载模式:voidmethod(vectorelements){}voidmethod(stringelements){method(convertStringToVector(elements));}哪里vectorconvertStringToVector(stringstr)按预期定义。也就是说,对于每个类方法,我都被迫添加一个额外的方法来重载s

c++ - C++ 运算符重载返回中的常量正确性

我有点困惑为什么我被告知要从C++中的二元运算符返回constfoo而不是foo。我一直在阅读BruceEckel的“ThinkinginC++”,在关于运算符重载的章节中,他说“通过使[重载二元运算符的]返回值成为常量,您声明只有一个常量可以为该返回值调用成员函数。这是const正确的,因为它可以防止您将潜在有值(value)的信息存储在最有可能丢失的对象中。但是,如果我有一个返回const的加号运算符和一个前缀增量运算符,则此代码无效:classInteger{inti;public:Integer(intii):i(ii){}Integer(Integer&);constInte

c++ - operator<< 无法输出 std::endl -- 修复?

下面的代码在应该只输出std::endl时出错了:#include#includestructMyStream{std::ostream*out_;MyStream(std::ostream*out):out_(out){}std::ostream&operatorstructFoo{OutputStream*out_;Foo(OutputStream*out):out_(out){}voidtest(){(*out_)foo(&out);foo.test();returnEXIT_SUCCESS;}错误是:stream1.cpp:19:error:nomatchfor'operato

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

c++ - C++ 中奇怪的重载规则

我正在尝试使用GCC4.5.0编译此代码:#include#includetemplatevoidsort(T,T){}intmain(){std::vectorv;sort(v.begin(),v.end());}但是好像不行:$g++-cnm.cppnm.cpp:Infunction‘intmain()’:nm.cpp:9:28:error:callofoverloaded‘sort(std::vector::iterator,std::vector::iterator)’isambiguousnm.cpp:4:28:note:candidatesare:voidsort(T,T)

c++ - 在 C++ 中重载类的运算符 []

我有一个类,我已经编写了它的[]运算符,我希望运算符有时返回一个int,有时返回一个struct。但是编译器不允许我重载运算符,为什么?它说:“...不能重载”代码:templatestructpart{};templateclassLinkedList{public:LinkedList():size(0),head(0){}T&operator[](constint&loc);part&operator[](constint&loc);};templateT&LinkedList::operator[](constint&loc){..alotofthingwhichcompile

c++ - 重载 operator<< 以在不使用友元函数的情况下输出对象成员

隔了很长时间我正在刷新cpp,试图理解运算符重载方法。我试图重载“operator这是我的类定义:classAdd{private:intx;public:friendostream&operator函数实现//Method1ostream&operator主函数调用cout现在我的问题是,我想在不使用friend函数的情况下实现方法1的类型调用。但是不知道,在cpp中可不可以。我尝试了很少的实现,但都给我编译错误。请帮助我理解我在这里遗漏的要点。 最佳答案 如果你的类中有公共(public)访问函数,或者stream-就像一个,你